﻿#ifndef _TCPCLIENT_H_
#define _TCPCLIENT_H_

#include "CELL.h"
#include "MessageHeader.hpp"
#include "CELLNetWork.hpp"
#include "CELLClient.h"
#include <stdio.h>
#include <string.h>

class EasyTcpClient
{
protected:
	CELLClient* _pClient = nullptr;

	bool _isConnected = false;

	// 在epoll中用于创建epoll根节点
	virtual void OnInitSocket() {}

	// 在epoll中用于挂载节点
	virtual void OnConnect() {}
public:
	// 构造
	EasyTcpClient();

	// 虚析构
	virtual ~EasyTcpClient();

	// 初始化
	int initSocket(int sendSize = SEND_BUF_SIZE, int recvSize = RECV_BUF_SIZE);

	// 连接
	int Connect(const char *ip, unsigned short port);

	// 关闭
	virtual void Close();
	
	// 发送数据
	// 处理网络消息
	virtual bool OnRun(int microseconds = 1) = 0;

	// 是否工作中
	inline bool IsRun();

	// 接收数据 处理 粘包 拆包
	int RecvData();

	void DoMsg();

	// 处理消息 返回响应(由继承的子类实现)
	virtual void OnNetMsg(DataHeader* header) = 0;

	// 发送数据
	int SendData(DataHeader* header);

	int SendData(const char* pData, int nLen);
};

#endif // #ifndef _TCPCLIENT_H_